#include"SList.h"

//int removeElement(int* nums, int numsSize, int val) {
//    int temp[100] = { 0 };
//    int count = 0;
//    for (int i = 0; i < numsSize; i++)
//    {
//        if (nums[i] != val)
//        {
//            temp[count] = nums[i];
//            count++;
//        }
//    }
//    memcpy(nums, temp, sizeof(int) * numsSize);
//    return count;
//}

//int removeElement(int* nums, int numsSize, int val) {
//    int src = 0;
//    int dst = 0;
//    while (src < numsSize)
//    {
//        if (nums[src] != val)
//        {
//            nums[dst++] = nums[src++];
//        }
//        else
//        {
//            src++;
//        }
//    }
//    return dst;
//}

//int removeDuplicates(int* nums, int numsSize) {
//	int src = 1;
//	int dst = 0;
//	while (src < numsSize)
//	{
//		if (nums[src] != nums[dst])
//		{
//			nums[++dst] = nums[src++];
//		}
//		else
//		{
//			src++;
//		}
//	}
//	return dst + 1;
//}

//struct ListNode* removeElements(struct ListNode* head, int val) {
//	struct ListNode* prev = NULL, * cur = head;
//	while (cur)
//	{
//		if (cur->val == val)
//		{
//			if (prev)
//			{
//				prev->next = cur->next;
//				free(cur);
//				cur = prev->next;
//			}
//			else
//			{
//				cur = head->next;
//				free(head);
//				head = cur;
//			}
//
//		}
//		else
//		{
//			prev = cur;
//			cur = cur->next;
//		}
//	}
//	return head;
//}

//struct ListNode* middleNode(struct ListNode* head) {
//	struct ListNode* fast = head, * slow = head;
//	while (fast && fast->next)
//	{
//		slow = slow->next;
//		fast = fast->next->next;
//	}
//	return slow;
//}

void TestSList1()
{
	SLTNode* plist = NULL;
	SLTPushFront(&plist, 1);
	SLTPushFront(&plist, 2);
	SLTPushFront(&plist, 3);
	SLTPushFront(&plist, 4);
	SLTPushBack(&plist, 5);
	SLTPrint(plist);
}

void TestSList2()
{
	SLTNode* plist = NULL;
	SLTPushBack(&plist, 5);
	SLTPushBack(&plist, 4);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 1);
	SLTPrint(plist);
}

void TestSList3()
{
	SLTNode* plist = NULL;
	SLTPushBack(&plist, 5);
	SLTPushBack(&plist, 4);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 1);
	/*SLTPopBack(&plist);
	SLTPopFront(&plist);*/
	SLTPrint(plist);
	SLTNode* pos = SLTFind(plist, 2);
	if (pos)
	{
		SLTInsert(&plist, pos, 30);
	}
	SLTPrint(plist);
	pos = SLTFind(plist, 30);
	SLTInsertAfter(&plist, pos, 45);
	SLTInsert(&plist, pos, 44);
	SLTErase(&plist, pos);
	SLTPrint(plist);
}

int main()
{
	TestSList3();
	return 0;
}